package org.training.person.mason.basic.applet;

import java.applet.Applet;
import java.awt.AWTEvent;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Event;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.Rectangle;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ShowApplet extends Applet {
	MyCanvas canvas;
	MyControls controls;

	@Override
	public void init() {
		setLayout(new BorderLayout());
		canvas = new MyCanvas();
		add("Center", canvas);
		add("South", controls = new MyControls(canvas));
	}

	@Override
	public void destroy() {
		remove(canvas);
		remove(controls);
	}

	@Override
	public void start() {
		controls.setEnabled(true);
	}

	@Override
	public void stop() {
		controls.setEnabled(false);
	}

	@Override
	protected void processEvent(AWTEvent e) {
		if (e.getID() == Event.WINDOW_DESTROY) {
			System.exit(0);
		}
	}

	public static void main(String... args) {
		Frame f = new Frame("Show Applet");
		ShowApplet sa = new ShowApplet();
		sa.init();
		sa.start();
		f.add("Center", sa);
		f.setSize(300, 300);
		f.show();
	}

	public String getAppletInfo() {
		return "An interactive test of the Graphics.drawArc and \nGraphics.fillArc routines."
				+ " Can be run \neither as a standalone application by typing 'java ArcTest'"
				+ " \nor as an applet in the AppletViewer.";
	}
}

class MyCanvas extends Canvas {
	int startAngle = 0;
	int endAngle = 45;
	boolean filled = false;
	Font font;

	public void paint(Graphics g) {
		Rectangle r = getBounds();
		int hlines = r.height / 10;
		int vlines = r.width / 10;

		g.setColor(Color.red);
		for (int i = 0; i <= hlines; i++) {
			g.drawLine(0, i * 10, r.width, i * 10);
		}
		for (int i = 0; i < vlines; i++) {
			g.drawLine(i * 10, 0, i * 10, r.height);
		}
		g.setColor(Color.darkGray);
		if (filled) {
			g.fillArc(0, 0, r.width - 1, r.height - 1, startAngle, endAngle);
		} else {
			g.fillArc(0, 0, r.width - 1, r.height - 1, startAngle, endAngle);
		}

		g.setColor(Color.yellow);
		g.setFont(font);
		g.drawLine(0, r.height / 2, r.width, r.height / 2);
		g.drawLine(r.width / 2, 0, r.width / 2, r.height);
		g.drawLine(0, 0, r.width, r.height);
		g.drawLine(r.width, 0, 0, r.height);

		int sx = 10;
		int sy = r.height - 28;
		g.drawString("S = " + startAngle, sx, sy);
		g.drawString("E = " + endAngle, sx, sy + 14);
	}

	public void redraw(boolean filled, int start, int end) {
		this.filled = filled;
		this.startAngle = start;
		this.endAngle = end;
		repaint();
	}
}

class MyControls extends Panel implements ActionListener {

	TextField s;
	TextField e;
	MyCanvas canvas;

	public MyControls(MyCanvas canvas) {
		Button b = null;
		this.canvas = canvas;
		add(s = new TextField("0", 4));
		add(e = new TextField("45", 4));
		b = new Button("Fill");
		b.addActionListener(this);
		add(b);
		b = new Button("Draw");
		b.addActionListener(this);
		add(b);
	}

	public void actionPerformed(ActionEvent e) {
		String label = e.getActionCommand();
		canvas.redraw(label.equals("Fill"),
				Integer.parseInt(s.getText().trim()),
				Integer.parseInt(this.e.getText().trim()));
	}

}
